﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using Newtonsoft.Json;
using InTREPWP.ViewModels;
using System.Linq;
using System.Collections.ObjectModel;

namespace InTREPWP
{
    public class IntrepService : IDisposable
    {
        public Dictionary<String, String> IMEIsCadastrados { get; set; }

        public IntrepService()
        {
            IMEIsCadastrados = new Dictionary<string, string>();

            IMEIsCadastrados.Add("123456786543210", "fatec");
        }

        public bool Autenticar(String json)
        {
            LoginViewModel login = JsonConvert.DeserializeObject<LoginViewModel>(json);

            Boolean retorno = false;

            if (IMEIsCadastrados.ContainsKey(login.IMEI))
                if (IMEIsCadastrados[login.IMEI] == login.Password)
                    retorno = true;

            return retorno;
        }

        public string ListarEmbarques(string filtro)
        {

            var model = App.DadosRemotos.Embarques;

            if (!String.IsNullOrEmpty(filtro) && filtro.Length < 1)
            {
                var newmodel = (from x in model
                                where x.Destino.ToLower().Contains(filtro.ToLower()) ||
                                x.Navio.ToLower().Contains(filtro.ToLower()) ||
                                x.Produto.ToLower().Contains(filtro.ToLower()) ||
                                x.Id.ToString().Contains(filtro.ToLower())
                                select x);

                return JsonConvert.SerializeObject(newmodel);
            }

            return JsonConvert.SerializeObject(model);
        }

        public string ObterDetalhesEmbarque(String json)
        {
            Int32 id = Convert.ToInt32(JsonConvert.DeserializeObject(json));

            var Embarque = App.DadosRemotos.Embarques.Where(x => x.Id == id).Single();

            String retorno = JsonConvert.SerializeObject(Embarque);

            return retorno;
        }

        public string ObterItensEmbarque(String json)
        {
            Int32 id = Convert.ToInt32(JsonConvert.DeserializeObject(json));

            var itens = App.DadosRemotos.ItensDeEmbarque.Where(x => x.EmbarqueId == id);

            String retorno = JsonConvert.SerializeObject(itens);

            return retorno;
        }

        public string EnviarMensagem(String json)
        {
            MensagemViewModel msg = JsonConvert.DeserializeObject<MensagemViewModel>(json);

            RetornoViewModel retorno = new RetornoViewModel
            {
                Ok = true
            };

            return JsonConvert.SerializeObject(retorno);
        }

        //ListarEmbarquesFiltro(String filtro): 
        //ListarEmbarquesAvancado(Int32? embarqueId, Int32? navioId, Int32? navioId, Int32? exportadorId )
        //ListarArquivos(Int32 Id)
        //ObterArquivo(Int32 Id): 

        public void Dispose()
        {
            this.Dispose(true);
            GC.SuppressFinalize(this);
        }

        private void Dispose(bool p)
        {
        }
    }
}
